<?php
# 文件名称:config.php
# MetInfo在线反馈系统 
# Copyright (C) 长沙米拓信息技术有限公司 (http://www.metinfo.cn). All rights reserved.
defined( '_SYS' ) or die( 'No direct script access allowed' );
class C_config {
	var $config = array();
	var $is_loaded = array();
	// 从 config.inc.php 文件中读取数据
	function C_config()
	{
		$this->load();
	}
	
	/**
	 * 加载配置文件
	 *
	 * @访问限制	public
	 * @参数		string	名称
	 * @返回类型	boolean
	 */	
	function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
	{
		$fileType = ".php";
		$file = ($file == '') ? 'config' : str_replace($fileType, '', $file);
	
		if (in_array($file, $this->is_loaded, TRUE))
		{
			return TRUE;
		}
		if ( ! file_exists(PATH_CONFIGURATION.DS.$file.$fileType))
		{
			if ($fail_gracefully === TRUE)
			{
				return FALSE;
			}			
			show_error('The configuration file '.$file.$fileType.' does not exist.');
		}
		
		include(PATH_CONFIGURATION.DS.$file.$fileType);

		if ( ! isset($config) OR ! is_array($config))
		{
			if ($fail_gracefully === TRUE)
			{
				return FALSE;
			}
			show_error('Your '.$file.EXT.' file does not appear to contain a valid configuration array.');
		}
		//作用域
		if ($use_sections === TRUE)
		{
			if (isset($this->config[$file]))
			{
				$this->config[$file] = array_merge($this->config[$file], $config);
			}
			else
			{
				$this->config[$file] = $config;
			}
		}
		else
		{
			$this->config = array_merge($this->config, $config);
		}
		//记录
		$this->is_loaded[] = $file;
		//释放
		unset($config);
		return TRUE;
	}
	
	function reload($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
	{
		for($i=0;$i<count($this->is_loaded);$i++)
		{
			if($file==$this->is_loaded[$i]) unset($this->is_loaded[$i]);
		}
		$this->load($file, $use_sections, $fail_gracefully);
	}
	
	/**
	 * 解析配置文件字段
	 *
	 *
	 * @访问限制	public
	 * @参数		string	字段名称
	 * @参数		string	索引
	 * @参数		bool
	 * @返回类型	string
	 */
	function item($item, $index = '')
	{	
		if ($index == '')
		{	
			if ( ! isset($this->config[$item]))
			{
				return FALSE;
			}
			$pref = $this->config[$item];
		}
		else
		{
			if ( ! isset($this->config[$index]))
			{
				return FALSE;
			}
			if ( ! isset($this->config[$index][$item]))
			{
				return FALSE;
			}
			$pref = $this->config[$index][$item];
		}
		return $pref;
	}
  	
	/**
	 * 解析配置文件字段（加slash）
	 *
	 *
	 * @访问限制	public
	 * @参数		string
	 * @参数		bool
	 * @返回类型	string
	 */
	function slash_item($item)
	{
		if ( ! isset($this->config[$item]))
		{
			return FALSE;
		}
		$pref = $this->config[$item];
		if ($pref != '' && substr($pref, -1) != '/')
		{	
			$pref .= '/';
		}
		return $pref;
	}
	/**
	 * 设置字段
	 *
	 * @访问限制	public
	 * @参数		string
	 * @参数		string
	 * @返回类型	void
	 */
	function set_item($item, $value)
	{
		$this->config[$item] = $value;
	}
	function arrayToString( &$arr ) {
		$vars = "#网站配置\n";
		$num = 5;
		foreach ($arr as $k => $v)
		{
			//是否为单变量（非组合变量 如数组）
			if (is_scalar($v)) {
				$vars .= "\$config['". $k . "'] = '" . addcslashes($v,'\'') . "';\n";
			} elseif (is_array($v)) {
				$vars .= "\$config['". $k . "'] = " . $this->_getArrayString($v) . ";\n";
			}
			if($num==18) {$vars .= "#数据库配置\n";$num++;}
			if($num==25) {$vars .= "#邮件配置\n";$num++;}
			if($num==30) {$vars .= "#系统配置\n";$num++;}
			if($num==37) {$vars .= "#Meta 配置\n";$num++;}
			$num++;
		}
		$str = "<?php\n"."defined( '_SYS' ) or die( 'No direct script access allowed' ); \n";
		$str .= $vars;
		$str .= "\n?>";
		return $str;
	}
	function _getArrayString($a)
	{
		$s = 'array(';
		$i = 0;
		foreach ($a as $k => $v)
		{
			$s .= ($i) ? ', ' : '';
			$s .= '"'.$k.'" => ';
			if (is_array($v)) {
				$s .= $this->_getArrayString($v);
			} else {
				$s .= '"'.addcslashes($v,'\'').'"';
			}
			$i++;
		}
		$s .= ')';
		return $s;
	}
}
# 本程序是一个开源系统,使用时请你仔细阅读使用协议,商业用途请自觉购买商业授权.
# Copyright (C) 长沙米拓信息技术有限公司 (http://www.metinfo.cn). All rights reserved.
?>